home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Collections: Purity
/
Purity #22 (1994-01-19)(Diesel)(DE)[WB].zip
/
Purity #22 (1994-01-19)(Diesel)(DE)[WB].adf
/
PPPClone
/
PPDemo.p
< prev
next >
Wrap
Text File
|
1994-01-17
|
4KB
|
140 lines
PROGRAM PPdemo;
{
**************************************
*** powerpacker.library - Demo ***
**************************************
*** Autor : Marc Pahlenkämper ***
*** Datum : 15.7.92 ***
*** Sprache : Kickpascal V2.10 ***
*** Rechte : Maxon Computer GmbH ***
*** Redaktion Kickstart ***
**************************************
}
USES Exec;
{$incl "pp.lib",'dos.lib'}
{--------- globale Variablen ---------}
VAR len,FileLen,Err : long;
ok,CrLen : long;
start,FileStart : ptr;
CrInfo : ptr;
FHandle : BPTR;
FName : String;
BEGIN
IF FromWB THEN BEGIN
Assign(input,'Con:20/10/600/180/PPDemo');
Reset(input);
Output:=Input;
END;
{-----------------------------------}
{- Öffnen der Library -}
OpenLib(PPBase,PPNAME,PPVERSION);
Writeln("Demo zur Benutzung der powerpacker.library");
{-----------------------------------}
{- Eingabe und Öffnen des Files -}
Write("Bitte Filename eingeben: ");
Readln(FName);
FHandle := DosOpen(FName,MODE_OLDFILE);
IF FHandle=0 THEN BEGIN
Writeln("Kann ",FName," nicht öffnen.");
Halt(20);
END;
{-----------------------------------}
{- Die folgenden beiden Zeilen er- -}
{- mitteln die Länge des File -}
FileLen:=DosSeek(FHandle,0,OFFSET_END);
FileLen:=DosSeek(FHandle,0,OFFSET_BEGINNING);
{-----------------------------------}
{- Speicher für File allozieren -}
{- und Daten in den Speicher laden -}
FileStart:=ptr(Alloc_Mem(FileLen+64,0));
Err:=DosRead(FHandle,FileStart,FileLen);
ok:=DosClose(FHandle);
IF Err<>FileLen THEN BEGIN
Writeln("Fehler beim Lesen von ",FName);
Halt(20);
END;
{-----------------------------------}
{- Hier beginnt das Crunchen -}
CrInfo := ppAllocCrunchInfo(CRUN_GOOD,SPEEDUP_BUFFMEDIUM,NIL,NIL);
IF CrInfo=NIL THEN BEGIN
Writeln("Nicht genug Speicher");
Halt(20);
END;
Writeln("Packe nun ",FName," mit Modus Medium..."#10);
Writeln("Größe vor dem Packen : ",FileLen);
CrLen := ppCrunchBuffer(CrInfo,FileStart,FileLen);
ppFreeCrunchInfo(CrInfo);
IF CrLen=PP_BUFFEROVERFLOW THEN BEGIN
Writeln("Buffer overflow !");
Halt(20);
END;
Writeln("Größe nach dem Packen: ",CrLen);
{-----------------------------------}
{- Jetzt werden die gepackten -}
{- Daten zwischengespeichert -}
Writeln;Writeln("Speichere das ganze zwischen...");
FHandle:=DosOpen("ram:temp.pp",MODE_NEWFILE);
IF FHandle=0 THEN BEGIN
Writeln("Kann temporäres File nicht öffnen");
Halt(20);
END;
IF NOT ppWriteDataHeader(FHandle,CRUN_GOOD,0,0) THEN BEGIN
Writeln("Write Error");
Halt(20);
END;
err:=DosWrite(FHandle,FileStart,CrLen);
ok:=DosClose(FHandle);
IF err<>CrLen THEN BEGIN
Writeln("Write Error");
Halt(20);
END;
Free_Mem(Long(FileStart),FileLen+64);
FileStart:=NIL;
Writeln("File jetzt zwischengespeichert"#10);
{-----------------------------------}
{- nun entpacken wir das Ganze -}
{- wieder mit ppLoadData() -}
Writeln("Das entcrunchen geht ganz leicht mit ppLoadData()...");
err:=ppLoadData("ram:temp.pp",DECR_POINTER,0,^Start,^Len,NIL);
IF err<>0 THEN BEGIN
Writeln(ppErrorMessage(err));
Halt(20);
END;
fhandle:=DosOpen('ram:0',Mode_Newfile);
IF FHandle=0 THEN
BEGiN
writeln('kann File nicht öffnen');
halt(20);
END;
err:=DosWrite(fhandle,start,len);
err:=dosclose(fhandle);
Writeln("Alles schon geschehen mit einem Funktions-Aufruf !");
{-----------------------------------}
{- Speicher muß mit FreeMem wieder -}
{- freigegeben werden -}
FreeMem(FileStart,FileLen);
IF FromWB THEN BEGIN
Writeln("Bitte Return drücken");
Readln(FName);
Close(Input);
END;
END;